home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / progs / editor / frexxed / fpl / gotolabel.fpl < prev    next >
Text File  |  1996-08-14  |  1KB  |  56 lines

  1. export void GotoLabel()
  2. {
  3.   int line = ReadInfo("line");
  4.   int col = ReadInfo("byte_position");
  5.  
  6.   string labels[100];
  7.   int linenum[100];
  8.   string junk;
  9.   int numoflab=0;
  10.   int size=100;
  11.   const string validlabel= "^([a-zA-Z_0-9]+):$";
  12.   int moved;
  13.  
  14.   Visible(0);
  15.   GotoLine(1); /* from the start! */
  16.  
  17.   while(!Search(validlabel, "=wf+")) {
  18.     junk = ReplaceMatch(validlabel, "\\1");
  19.     if(strlen(junk)) {
  20.       labels[ numoflab ] = junk;
  21.       linenum [ numoflab ] = ReadInfo("line");
  22.       numoflab++;
  23.       if(numoflab == size) {
  24.         /* Filled up the arrays, increase the sizes! */
  25.         size += 100;
  26.         resize labels[size];
  27.         resize linenum[size];
  28.       }
  29.     }
  30.   }
  31.   if(numoflab) {
  32.     string selection;
  33.     /* we've found some labels */
  34.     if(RequestWindow("Jump to label",
  35.                      "", "A", &labels, &selection, numoflab) &&
  36.        strlen(selection)) {
  37.       /* We have an OK! */
  38.       int a;
  39.       while(a < numoflab) {
  40.         if(!strcmp(selection, labels[a])) {
  41.           /* this is the label! */
  42.           GotoLine(linenum[a]); /* jump to the label! */
  43.           if((a = ReadInfo("cursor_y")) > 2)
  44.             ScrollDown(a-2);
  45.           return;
  46.         }
  47.         a++;
  48.       }
  49.     }
  50.   }
  51.   else
  52.     ReturnStatus("No labels found!");
  53.   if(!moved)
  54.     GotoLine(line, col); // get back to start
  55. }
  56.